# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1TelemetryDevice do
  @moduledoc """
  Telemetry data collected from a managed device. * Granular permission needed: TELEMETRY_API_DEVICE

  ## Attributes

  *   `appReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1AppReport.t)`, *default:* `nil`) - Output only. App reports collected periodically sorted in a decreasing order of report_time.
  *   `audioStatusReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1AudioStatusReport.t)`, *default:* `nil`) - Output only. Audio reports collected periodically sorted in a decreasing order of report_time.
  *   `batteryInfo` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1BatteryInfo.t)`, *default:* `nil`) - Output only. Information on battery specs for the device.
  *   `batteryStatusReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1BatteryStatusReport.t)`, *default:* `nil`) - Output only. Battery reports collected periodically.
  *   `bootPerformanceReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1BootPerformanceReport.t)`, *default:* `nil`) - Output only. Boot performance reports of the device.
  *   `cpuInfo` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1CpuInfo.t)`, *default:* `nil`) - Output only. Information regarding CPU specs for the device.
  *   `cpuStatusReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1CpuStatusReport.t)`, *default:* `nil`) - Output only. CPU status reports collected periodically sorted in a decreasing order of report_time.
  *   `customer` (*type:* `String.t`, *default:* `nil`) - Output only. Google Workspace Customer whose enterprise enrolled the device.
  *   `deviceId` (*type:* `String.t`, *default:* `nil`) - Output only. The unique Directory API ID of the device. This value is the same as the Admin Console's Directory API ID in the ChromeOS Devices tab
  *   `graphicsInfo` (*type:* `GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1GraphicsInfo.t`, *default:* `nil`) - Output only. Contains information regarding Graphic peripherals for the device.
  *   `graphicsStatusReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1GraphicsStatusReport.t)`, *default:* `nil`) - Output only. Graphics reports collected periodically.
  *   `heartbeatStatusReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1HeartbeatStatusReport.t)`, *default:* `nil`) - Output only. Heartbeat status report containing timestamps periodically sorted in decreasing order of report_time
  *   `kioskAppStatusReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1KioskAppStatusReport.t)`, *default:* `nil`) - Output only. Kiosk app status report for the kiosk device
  *   `memoryInfo` (*type:* `GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1MemoryInfo.t`, *default:* `nil`) - Output only. Information regarding memory specs for the device.
  *   `memoryStatusReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1MemoryStatusReport.t)`, *default:* `nil`) - Output only. Memory status reports collected periodically sorted decreasing by report_time.
  *   `name` (*type:* `String.t`, *default:* `nil`) - Output only. Resource name of the device.
  *   `networkBandwidthReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1NetworkBandwidthReport.t)`, *default:* `nil`) - Output only. Network bandwidth reports collected periodically sorted in a decreasing order of report_time.
  *   `networkDiagnosticsReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1NetworkDiagnosticsReport.t)`, *default:* `nil`) - Output only. Network diagnostics collected periodically.
  *   `networkInfo` (*type:* `GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1NetworkInfo.t`, *default:* `nil`) - Output only. Network devices information.
  *   `networkStatusReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1NetworkStatusReport.t)`, *default:* `nil`) - Output only. Network specs collected periodically.
  *   `orgUnitId` (*type:* `String.t`, *default:* `nil`) - Output only. Organization unit ID of the device.
  *   `osUpdateStatus` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1OsUpdateStatus.t)`, *default:* `nil`) - Output only. Contains relevant information regarding ChromeOS update status.
  *   `peripheralsReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1PeripheralsReport.t)`, *default:* `nil`) - Output only. Peripherals reports collected periodically sorted in a decreasing order of report_time.
  *   `runtimeCountersReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1RuntimeCountersReport.t)`, *default:* `nil`) - Output only. Runtime counters reports collected device lifetime runtime, as well as the counts of S0->S3, S0->S4, and S0->S5 transitions, meaning entering into sleep, hibernation, and power-off states
  *   `serialNumber` (*type:* `String.t`, *default:* `nil`) - Output only. Device serial number. This value is the same as the Admin Console's Serial Number in the ChromeOS Devices tab.
  *   `storageInfo` (*type:* `GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1StorageInfo.t`, *default:* `nil`) - Output only. Information of storage specs for the device.
  *   `storageStatusReport` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1StorageStatusReport.t)`, *default:* `nil`) - Output only. Storage reports collected periodically.
  *   `thunderboltInfo` (*type:* `list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1ThunderboltInfo.t)`, *default:* `nil`) - Output only. Information on Thunderbolt bus.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :appReport =>
            list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1AppReport.t()) | nil,
          :audioStatusReport =>
            list(
              GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1AudioStatusReport.t()
            )
            | nil,
          :batteryInfo =>
            list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1BatteryInfo.t())
            | nil,
          :batteryStatusReport =>
            list(
              GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1BatteryStatusReport.t()
            )
            | nil,
          :bootPerformanceReport =>
            list(
              GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1BootPerformanceReport.t()
            )
            | nil,
          :cpuInfo =>
            list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1CpuInfo.t()) | nil,
          :cpuStatusReport =>
            list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1CpuStatusReport.t())
            | nil,
          :customer => String.t() | nil,
          :deviceId => String.t() | nil,
          :graphicsInfo =>
            GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1GraphicsInfo.t() | nil,
          :graphicsStatusReport =>
            list(
              GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1GraphicsStatusReport.t()
            )
            | nil,
          :heartbeatStatusReport =>
            list(
              GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1HeartbeatStatusReport.t()
            )
            | nil,
          :kioskAppStatusReport =>
            list(
              GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1KioskAppStatusReport.t()
            )
            | nil,
          :memoryInfo =>
            GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1MemoryInfo.t() | nil,
          :memoryStatusReport =>
            list(
              GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1MemoryStatusReport.t()
            )
            | nil,
          :name => String.t() | nil,
          :networkBandwidthReport =>
            list(
              GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1NetworkBandwidthReport.t()
            )
            | nil,
          :networkDiagnosticsReport =>
            list(
              GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1NetworkDiagnosticsReport.t()
            )
            | nil,
          :networkInfo =>
            GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1NetworkInfo.t() | nil,
          :networkStatusReport =>
            list(
              GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1NetworkStatusReport.t()
            )
            | nil,
          :orgUnitId => String.t() | nil,
          :osUpdateStatus =>
            list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1OsUpdateStatus.t())
            | nil,
          :peripheralsReport =>
            list(
              GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1PeripheralsReport.t()
            )
            | nil,
          :runtimeCountersReport =>
            list(
              GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1RuntimeCountersReport.t()
            )
            | nil,
          :serialNumber => String.t() | nil,
          :storageInfo =>
            GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1StorageInfo.t() | nil,
          :storageStatusReport =>
            list(
              GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1StorageStatusReport.t()
            )
            | nil,
          :thunderboltInfo =>
            list(GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1ThunderboltInfo.t())
            | nil
        }

  field(:appReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1AppReport,
    type: :list
  )

  field(:audioStatusReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1AudioStatusReport,
    type: :list
  )

  field(:batteryInfo,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1BatteryInfo,
    type: :list
  )

  field(:batteryStatusReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1BatteryStatusReport,
    type: :list
  )

  field(:bootPerformanceReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1BootPerformanceReport,
    type: :list
  )

  field(:cpuInfo,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1CpuInfo,
    type: :list
  )

  field(:cpuStatusReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1CpuStatusReport,
    type: :list
  )

  field(:customer)
  field(:deviceId)

  field(:graphicsInfo,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1GraphicsInfo
  )

  field(:graphicsStatusReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1GraphicsStatusReport,
    type: :list
  )

  field(:heartbeatStatusReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1HeartbeatStatusReport,
    type: :list
  )

  field(:kioskAppStatusReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1KioskAppStatusReport,
    type: :list
  )

  field(:memoryInfo, as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1MemoryInfo)

  field(:memoryStatusReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1MemoryStatusReport,
    type: :list
  )

  field(:name)

  field(:networkBandwidthReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1NetworkBandwidthReport,
    type: :list
  )

  field(:networkDiagnosticsReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1NetworkDiagnosticsReport,
    type: :list
  )

  field(:networkInfo, as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1NetworkInfo)

  field(:networkStatusReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1NetworkStatusReport,
    type: :list
  )

  field(:orgUnitId)

  field(:osUpdateStatus,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1OsUpdateStatus,
    type: :list
  )

  field(:peripheralsReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1PeripheralsReport,
    type: :list
  )

  field(:runtimeCountersReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1RuntimeCountersReport,
    type: :list
  )

  field(:serialNumber)
  field(:storageInfo, as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1StorageInfo)

  field(:storageStatusReport,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1StorageStatusReport,
    type: :list
  )

  field(:thunderboltInfo,
    as: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1ThunderboltInfo,
    type: :list
  )
end

defimpl Poison.Decoder,
  for: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1TelemetryDevice do
  def decode(value, options) do
    GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1TelemetryDevice.decode(
      value,
      options
    )
  end
end

defimpl Poison.Encoder,
  for: GoogleApi.ChromeManagement.V1.Model.GoogleChromeManagementV1TelemetryDevice do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
